package command_pattern.quash;

/**
 * @author 申书航
 * @version 1.0
 *
 * 抽象命令类，定义命令的基本结构和行为
 */
public abstract class Command implements Cloneable{

    protected final Application app;  // 应用程序实例

    protected final Editor editor;    // 编辑器实例

    private String backup;


    /**
     * 构造函数，初始化应用程序和编辑器实例
     *
     * @param app 应用程序实例
     * @param editor 编辑器实例
     */
    public Command(Application app, Editor editor) {
        this.app = app;
        this.editor = editor;
    }


    /**
     * 执行命令的抽象方法，由具体命令实现
     */
    public abstract void execute();

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    /**
     * 保存当前编辑器的文本内容备份
     */
    public void saveBackup() {
        backup = editor.getText();
    }

    /**
     * 撤销操作，将编辑器的文本恢复到上一个备份
     */
    public void undo() {
        editor.replaceText(backup);
    }
}
